package controler.algorithms.knn;

/** 
 * @file Neighbour.java  
 * 
 **/

/**
 * @class Neighbour
 *   Klasa reprezentująca sąsiada.
 * 
 *        Klasa pomocnicza udostępniająca interface sąsiada wykorzystywany
 *        w algorytmie K-najbliższych sąsiadów. Implementuje interface Comparable,
 *        aby można było porównywać jej odległość od wyznaczanego punktu z innymi
 *        sąsiadami. 
 *        
 * @param features
 *            Tablica kolejnych pomiarów. 
 *            
 * @param P
 *		  Wartość predykowana, która jest wyznaczana przez ciąg poprzedzających pomiarów. 
 *            
 *            
 * @param distance
 *        Odległość sąsiada od punktu w przestrzeni dla którego przeprowadzany jest proces predykcji.
 *            
 */

public class Neighbour implements Comparable {
	private double[] features;
	private double P;
	private double distance;

	public double[] getFeatures() {
		return features;
	}

	public void setFeatures(double[] features) {
		this.features = features;
	}

	public double getP() {
		return P;
	}

	public void setP(double p) {
		P = p;
	}

	public double getDistance() {
		return distance;
	}

	public void setDistance(double distance) {
		this.distance = distance;
	}
	
	public String toString() {
		String text = "[";
		for(int i =0; i < features.length; i++) 
			text += features[i]+" ";
		text += "| "+getP()+"]";
		return text;
	}

	@Override
	public int compareTo(Object anotherNeighbour) {
		int returnedValue = 0;
		if (!(anotherNeighbour instanceof Neighbour))
			throw new ClassCastException("Nie można porównać.");

		if (((Neighbour) anotherNeighbour).getDistance() < this.distance)
			returnedValue = 1;
		else if (((Neighbour) anotherNeighbour).getDistance() > this.distance)
			returnedValue = -1;

		return returnedValue;
	}
}
